﻿Imports Persistencia
Imports DSControlePadrao
Public Class ctrTerceiros
    Inherits ctrPadrao

#Region "Enumeração"

    Public Enum eUnidades
        KG = 0
        PECA = 1
        M2 = 2
        M3 = 3
        CJ = 4
        LT = 5
        CX = 6
        MT = 7
        BD = 8
    End Enum

    Public Enum eValidaInclusaoTerceiro
        MARCA_OBRIGATORIA = 0
        FORMATO_OBRIGATORIO = 1
        QUANTIDADE_OBRIGATORIA = 2
        UNIDADE_OBRIGATORIA = 3
        PRECO_OBRIGATORIO = 4
        REGIAO_OBRIGATORIA = 5
    End Enum

    Public Enum eColunasTerceiros
        COD_REGIAO = 0
        NUM_ITEM = 1
        PRODUTO = 2
        MARCA = 3
        FORMATO = 4
        UNIDADE = 5
        QUANTIDADE = 6
        CUSTO_UNITARIO = 7
        CUSTO_TOTALL = 8
        BDI = 9
        PRECO_UNITARIO = 10
        PRECO_TOTAL = 11
    End Enum

#End Region


#Region "Variáveis de Classe"

    Public sUnidades As String() = {"Kg",
                                    "Pç",
                                    "M2",
                                    "M3",
                                    "Cj",
                                    "Lt",
                                    "Cx",
                                    "Mt",
                                    "Bd"}

    Public sValidaInclusao As String() = {"Marca obrigatória.",
                                          "Formato obrigatório.",
                                          "Quantidade inválida.",
                                          "Unidade obrigatória.",
                                          "Preço obrigatório.",
                                         "Região obrigatória."}

    Public sValidacaoBDI As String = "Valor máximo para BDI: " & MAX_BDI

    Public Const MAX_BDI As Decimal = 12

#End Region


    Public Function retornarDatTerceiros() As DataTable
        Dim datTerceiros As New DataTable

        With datTerceiros
            .Columns.Add("codRegiao", GetType(Integer))
            .Columns.Add("numItem", GetType(Integer))
            .Columns.Add("produto", GetType(String))
            .Columns.Add("marca", GetType(String))
            .Columns.Add("formato", GetType(String))
            .Columns.Add("unidade", GetType(String))
            .Columns.Add("quantidade", GetType(Double))
            .Columns.Add("custoUnitario", GetType(Double))
            .Columns.Add("custoTotal", GetType(Double))
            .Columns.Add("bdi", GetType(Double))
            .Columns.Add("precoUnitario", GetType(Double))
            .Columns.Add("precoTotal", GetType(Double))

            .TableName = "Terceiros"

        End With

        Return datTerceiros

    End Function

    Public Function validaInclusaoTerceirosProposta(ByVal iCodregiao As Int32,
                                                    ByVal sCodProduto As String,
                                                    ByVal sMarca As String,
                                                    ByVal sFormato As String,
                                                    ByVal dQuantidade As Int32,
                                                    ByVal sUnidade As String,
                                                    ByVal dPreco As Decimal) As Boolean
        Dim bRetorno As Boolean = True

        Try
            Me.limparMensagensValidacao()

            If String.IsNullOrEmpty(sCodProduto) Then
                If String.IsNullOrEmpty(sMarca) Then
                    MyBase.adicionarMensagensValidacao(eValidaInclusaoTerceiro.MARCA_OBRIGATORIA,
                                                       ctrPadrao.eTipoLog.ERRO,
                                                   Me.sValidaInclusao(eValidaInclusaoTerceiro.MARCA_OBRIGATORIA))
                    bRetorno = False
                End If

                If String.IsNullOrEmpty(sFormato) Then
                    MyBase.adicionarMensagensValidacao(eValidaInclusaoTerceiro.FORMATO_OBRIGATORIO,
                                                       ctrPadrao.eTipoLog.ERRO,
                                                   Me.sValidaInclusao(eValidaInclusaoTerceiro.FORMATO_OBRIGATORIO))
                    bRetorno = False
                End If

                If String.IsNullOrEmpty(sUnidade) Then
                    MyBase.adicionarMensagensValidacao(eValidaInclusaoTerceiro.UNIDADE_OBRIGATORIA,
                                                       ctrPadrao.eTipoLog.ERRO,
                                                   Me.sValidaInclusao(eValidaInclusaoTerceiro.UNIDADE_OBRIGATORIA))
                    bRetorno = False
                End If

            End If

            If dQuantidade = 0 Then
                MyBase.adicionarMensagensValidacao(eValidaInclusaoTerceiro.QUANTIDADE_OBRIGATORIA,
                                                   ctrPadrao.eTipoLog.ERRO,
                                               Me.sValidaInclusao(eValidaInclusaoTerceiro.QUANTIDADE_OBRIGATORIA))
                bRetorno = False
            End If

            If dPreco = 0 Then
                MyBase.adicionarMensagensValidacao(eValidaInclusaoTerceiro.PRECO_OBRIGATORIO,
                                                   ctrPadrao.eTipoLog.ERRO,
                                               Me.sValidaInclusao(eValidaInclusaoTerceiro.PRECO_OBRIGATORIO))
                bRetorno = False
            End If


            If iCodregiao = 0 Then
                MyBase.adicionarMensagensValidacao(eValidaInclusaoTerceiro.REGIAO_OBRIGATORIA,
                                                   ctrPadrao.eTipoLog.ERRO,
                                               Me.sValidaInclusao(eValidaInclusaoTerceiro.REGIAO_OBRIGATORIA))
                bRetorno = False
            End If

            Return bRetorno

        Catch ex As Exception
            bRetorno = False
            Throw New Exception("Ocorreu um erro ao validar a inclusão de produtos de terceiros na proposta. " & _
                                Environment.NewLine & ex.Message)


        End Try

    End Function

    Public Function validaMaxBDI(ByVal dBDI As Decimal) As Boolean

        Try

            Return dBDI <= MAX_BDI

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro ao validar o valor máximo para BDI. " & _
                                    Environment.NewLine & ex.Message)


        End Try
    End Function

    Public Sub calcularValoresTerceiros(ByVal iQuantidade As Int32,
                                             ByVal dPreco As Decimal,
                                             ByVal dCusto As Decimal,
                                             ByRef dPrecoTotal As Decimal,
                                             ByRef dCustoTotal As Decimal)
        Try

            dPrecoTotal = dPreco * iQuantidade
            dCustoTotal = dCusto * iQuantidade

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro ao retornar a versão do banco de dados. " & _
                                    Environment.NewLine & ex.Message)


        End Try

    End Sub

    Public Function calcularPrecoTerceiros(ByVal dCusto As Decimal, ByVal dBDI As Double) As Decimal
        Dim dPreco As Decimal = 0
        Dim dValorBDI As Double


        Try

            dValorBDI = 1 - (dBDI / 100)

            If dBDI <> 0 Then
                dPreco = dCusto / dValorBDI
            Else
                dPreco = dCusto
            End If

            Return dPreco

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro ao calcular o preço do produto de terceiros. " & _
                                    Environment.NewLine & ex.Message)


        End Try
    End Function

End Class
